namespace SimpleServiceBus.EndpointMonitor.Web.Helpers.Flot.FlotOptions
{
    public class FlotGridOptions
    {
        /// <summary>
        /// "color" is the color of the grid itself
        /// </summary>
        public string Color { get; set; }

        /// <summary>
        ///"backgroundColor" specifies the
        ///background color inside the grid area. The default value of null means
        ///that the background is transparent. You can also set a gradient, see
        ///the gradient documentation below.
        /// </summary>
        public string BackgroundColor { get; set; }

        /// <summary>
        /// "tickColor" is the color of the ticks
        /// 
        /// Note that you can style the tick
        ///labels with CSS, e.g. to change the color. They have class "tickLabel".
        ///"borderWidth" is the width of the border around the plot. Set it to 0
        ///to disable the border. You can also set "borderColor" if you want the
        ///border to have a different color than the grid lines.
        /// </summary>
        public string TickColor { get; set; }

        /// <summary>
        ///"labelMargin" is the spacing
        ///between tick labels and the grid.
        /// 
        ///   
        /// Note that you can style the tick
        ///labels with CSS, e.g. to change the color. They have class "tickLabel".
        ///"borderWidth" is the width of the border around the plot. Set it to 0
        ///to disable the border. You can also set "borderColor" if you want the
        ///border to have a different color than the grid lines.
        /// </summary>
        public int? LabelMargin { get; set; }

        /// <summary>
        ///"borderWidth" is the width of the border around the plot. Set it to 0
        ///to disable the border.
        /// </summary>
        public int? BorderWidth { get; set; }

        /// <summary>
        ///You can also set "borderColor" if you want the
        ///border to have a different color than the grid lines.
        /// </summary>
        public string BorderColor { get; set; }

        /// <summary>
        /// "markings" is used to draw simple lines and rectangular areas in the
        ///background of the plot. You can either specify an array of ranges on
        ///the form { xaxis: { from, to }, yaxis: { from, to } } (secondary axis
        ///coordinates with x2axis/y2axis) or with a function that returns such
        ///an array given the axes for the plot in an object as the first
        ///parameter.
        ///
        ///You can set the color of markings by specifying "color" in the ranges
        ///object. Here's an example array:
        ///
        ///  markings: [ { xaxis: { from: 0, to: 2 }, yaxis: { from: 10, to: 10 }, color: "#bb0000" }, ... ]
        ///
        ///If you leave out one of the values, that value is assumed to go to the
        ///border of the plot. So for example if you only specify { xaxis: {
        ///from: 0, to: 2 } } it means an area that extends from the top to the
        ///bottom of the plot in the x range 0-2.
        ///
        ///A line is drawn if from and to are the same, e.g.
        ///
        ///  markings: [ { yaxis: { from: 1, to: 1 } }, ... ]
        ///
        ///would draw a line parallel to the x axis at y = 1. You can control the
        ///line width with "lineWidth" in the ranges objects.
        ///
        ///An example function might look like this:
        ///
        ///  markings: function (axes) {
        ///    var markings = [];
        ///    for (var x = Math.floor(axes.xaxis.min); x < axes.xaxis.max; x += 2)
        ///      markings.push({ xaxis: { from: x, to: x + 1 } });
        ///    return markings;
        ///  }
        /// </summary>
        public string Markings { get; set; }

        /// <summary>
        /// If you set "clickable" to true, the plot will listen for click events
        ///on the plot area and fire a "plotclick" event on the placeholder with
        ///a position and a nearby data item object as parameters. The coordinates
        ///are available both in the unit of the axes (not in pixels) and in
        ///global screen coordinates.
        /// </summary>
        public bool? Clickable { get; set; }

        /// <summary>
        /// Likewise, if you set "hoverable" to true, the plot will listen for
        ///mouse move events on the plot area and fire a "plothover" event with
        ///the same parameters as the "plotclick" event. 
        /// </summary>
        public bool? Hoverable { get; set; }

        /// <summary>
        /// If "autoHighlight" is
        ///true (the default), nearby data items are highlighted automatically.
        ///If needed, you can disable highlighting and control it yourself with
        ///the highlight/unhighlight plot methods described elsewhere.
        /// </summary>
        public bool? AutoHighlight { get; set; }

        /// <summary>
        /// "mouseActiveRadius" specifies how far the mouse can be from an item
        ///and still activate it. If there are two or more points within this
        ///radius, Flot chooses the closest item. For bars, the top-most bar
        ///(from the latest specified data series) is chosen.
        /// </summary>
        public int? MouseActiveRadius { get; set; }
    }
}